/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.ws;

import edu.ucue.ptc.gco.mdl.Cliente;
import edu.ucue.ptc.gco.mdl.Direccion;
import edu.ucue.ptc.gco.ngc.CiudadManagerLocal;
import edu.ucue.ptc.gco.ngc.ClienteManagerLocal;
import edu.ucue.ptc.gco.ngc.DireccionManagerLocal;
import edu.ucue.ptc.gco.ngc.UsuarioManagerLocal;
import edu.ucue.ptc.gco.util.AtributoInvalidoException;
import edu.ucue.ptc.gco.util.DireccionValidadorException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.jws.WebService;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.xml.ws.RequestWrapper;

/**
 *
 * @author DELL
 */
@WebService(serviceName = "DireccionWebService")
@Stateless()
public class DireccionWebService {
    @EJB
    private DireccionManagerLocal ejbRef;// Add business logic below. (Right-click in editor and choose
    @EJB
    private UsuarioManagerLocal ejbRefUsuario;
    @EJB
    private CiudadManagerLocal ejbRefCiudad;
    @EJB
    private ClienteManagerLocal ejbRefCliente;
    // "Web Service > Add Operation"

    /**
     *
     * @param direccion
     * @param persona
     * @param nombreUsuario
     * @param contrasenaUsuario
     * @return
     * @throws AtributoInvalidoException
     * @throws DireccionValidadorException
     */
    @WebMethod(operationName = "crearDireccion")
    public Direccion crearDireccion(@WebParam(name = "direccion") Direccion direccion,@WebParam(name = "idPersona") int idPersona,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, DireccionValidadorException {                
        ejbRefCiudad.existeCiudad(direccion.getCiudad().getIdCiudad());
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        Cliente aux=ejbRefCliente.buscarPorId(idPersona,nombreUsuario, contrasenaUsuario);
        direccion.setPersona(aux);
        return ejbRef.crear(direccion,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "actualizarDireccion")
    public Direccion actualizarDireccion(@WebParam(name = "direccion") Direccion direccion, @WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException,DireccionValidadorException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return ejbRef.actualizar(direccion,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "eliminarDireccion")
    public boolean eliminarDireccion(@WebParam(name = "direccion") Direccion direccion, @WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException,DireccionValidadorException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return ejbRef.eliminar(direccion,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "eliminarcDireccion")    
    public boolean eliminarcDireccion(@WebParam(name = "idDireccion") String idDireccion, @WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException,DireccionValidadorException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return ejbRef.eliminarc(idDireccion,nombreUsuario, contrasenaUsuario);
    }

//    @WebMethod(operationName = "eliminarcDireccion_1")
//    @RequestWrapper(className = "eliminarcDireccion_1")    
//    public boolean eliminarcDireccion(@WebParam(name = "idDireccion") Long idDireccion, @WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException,DireccionValidadorException {
//        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
//        return ejbRef.eliminarc(idDireccion);
//    }

    @WebMethod(operationName = "listarTodosDireccion")
    public List<Direccion> listarTodosDireccion(@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException,DireccionValidadorException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return ejbRef.listarTodos(nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "obtenerPorIdDireccion")
    public Direccion obtenerPorIdDireccion(@WebParam(name = "idDireccion") String idDireccion, @WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException {
        try {
            return ejbRef.obtenerPorId(idDireccion,nombreUsuario, contrasenaUsuario);
        } catch (DireccionValidadorException ex) {
            Logger.getLogger(DireccionWebService.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
}
